﻿
namespace Galnote.Web
{
	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.ComponentModel.DataAnnotations;
	using System.Data.Objects.DataClasses;
	using System.Linq;
	using System.ServiceModel.DomainServices.Hosting;
	using System.ServiceModel.DomainServices.Server;


	// MetadataTypeAttribute 将 CommentMetadata 标识为类
	//，以携带 Comment 类的其他元数据。
	[MetadataTypeAttribute(typeof(Comment.CommentMetadata))]
	public partial class Comment
	{

		// 通过此类可将自定义特性附加到
		//Comment 类的属性。
		//
		// 例如，下面的代码将 Xyz 属性标记为
		//必需属性并指定有效值的格式:
		//    [Required]
		//    [RegularExpression("[A-Z][A-Za-z0-9]*")]
		//    [StringLength(32)]
		//    public string Xyz { get; set; }
		internal sealed class CommentMetadata
		{

			// 元数据类不会实例化。
			private CommentMetadata()
			{
			}

			public string Content
			{
				get;
				set;
			}

			public int Id
			{
				get;
				set;
			}

			public EntityCollection<Product> Products
			{
				get;
				set;
			}
		}
	}

	// MetadataTypeAttribute 将 MailMetadata 标识为类
	//，以携带 Mail 类的其他元数据。
	[MetadataTypeAttribute(typeof(Mail.MailMetadata))]
	public partial class Mail
	{

		// 通过此类可将自定义特性附加到
		//Mail 类的属性。
		//
		// 例如，下面的代码将 Xyz 属性标记为
		//必需属性并指定有效值的格式:
		//    [Required]
		//    [RegularExpression("[A-Z][A-Za-z0-9]*")]
		//    [StringLength(32)]
		//    public string Xyz { get; set; }
		internal sealed class MailMetadata
		{

			// 元数据类不会实例化。
			private MailMetadata()
			{
			}

			public int Id
			{
				get;
				set;
			}

			public EntityCollection<User> Receives
			{
				get;
				set;
			}

			public string Text
			{
				get;
				set;
			}

			public string Theme
			{
				get;
				set;
			}
		}
	}

	// MetadataTypeAttribute 将 ProductMetadata 标识为类
	//，以携带 Product 类的其他元数据。
	[MetadataTypeAttribute(typeof(Product.ProductMetadata))]
	public partial class Product
	{

		// 通过此类可将自定义特性附加到
		//Product 类的属性。
		//
		// 例如，下面的代码将 Xyz 属性标记为
		//必需属性并指定有效值的格式:
		//    [Required]
		//    [RegularExpression("[A-Z][A-Za-z0-9]*")]
		//    [StringLength(32)]
		//    public string Xyz { get; set; }
		internal sealed class ProductMetadata
		{

			// 元数据类不会实例化。
			private ProductMetadata()
			{
			}

			public User Author
			{
				get;
				set;
			}

			public int AuthorId
			{
				get;
				set;
			}

			public int Id
			{
				get;
				set;
			}

			public EntityCollection<Comment> Messages
			{
				get;
				set;
			}

			public EntityCollection<User> Owners
			{
				get;
				set;
			}

			public string Path
			{
				get;
				set;
			}

			public EntityCollection<Score> Popularities
			{
				get;
				set;
			}

			public DateTime Posted
			{
				get;
				set;
			}

			public string Respond
			{
				get;
				set;
			}

			public EntityCollection<Tag> Tags
			{
				get;
				set;
			}

			public string Title
			{
				get;
				set;
			}
		}
	}

	// MetadataTypeAttribute 将 ScoreMetadata 标识为类
	//，以携带 Score 类的其他元数据。
	[MetadataTypeAttribute(typeof(Score.ScoreMetadata))]
	public partial class Score
	{

		// 通过此类可将自定义特性附加到
		//Score 类的属性。
		//
		// 例如，下面的代码将 Xyz 属性标记为
		//必需属性并指定有效值的格式:
		//    [Required]
		//    [RegularExpression("[A-Z][A-Za-z0-9]*")]
		//    [StringLength(32)]
		//    public string Xyz { get; set; }
		internal sealed class ScoreMetadata
		{

			// 元数据类不会实例化。
			private ScoreMetadata()
			{
			}

			public int Id
			{
				get;
				set;
			}

			public Product Product
			{
				get;
				set;
			}

			public int ProductId
			{
				get;
				set;
			}

			public string Project
			{
				get;
				set;
			}

			public int Value
			{
				get;
				set;
			}

			public User Voter
			{
				get;
				set;
			}

			public int VoterId
			{
				get;
				set;
			}
		}
	}

	// MetadataTypeAttribute 将 TagMetadata 标识为类
	//，以携带 Tag 类的其他元数据。
	[MetadataTypeAttribute(typeof(Tag.TagMetadata))]
	public partial class Tag
	{

		// 通过此类可将自定义特性附加到
		//Tag 类的属性。
		//
		// 例如，下面的代码将 Xyz 属性标记为
		//必需属性并指定有效值的格式:
		//    [Required]
		//    [RegularExpression("[A-Z][A-Za-z0-9]*")]
		//    [StringLength(32)]
		//    public string Xyz { get; set; }
		internal sealed class TagMetadata
		{

			// 元数据类不会实例化。
			private TagMetadata()
			{
			}

			public int Id
			{
				get;
				set;
			}

			public EntityCollection<Product> Products
			{
				get;
				set;
			}

			public string Value
			{
				get;
				set;
			}
		}
	}

	// MetadataTypeAttribute 将 UserMetadata 标识为类
	//，以携带 User 类的其他元数据。
	[MetadataTypeAttribute(typeof(User.UserMetadata))]
	public partial class User
	{

		// 通过此类可将自定义特性附加到
		//User 类的属性。
		//
		// 例如，下面的代码将 Xyz 属性标记为
		//必需属性并指定有效值的格式:
		//    [Required]
		//    [RegularExpression("[A-Z][A-Za-z0-9]*")]
		//    [StringLength(32)]
		//    public string Xyz { get; set; }
		internal sealed class UserMetadata
		{

			// 元数据类不会实例化。
			private UserMetadata()
			{
			}

			public string Account
			{
				get;
				set;
			}

			public DateTime Birthday
			{
				get;
				set;
			}

			public BloodType BloodTpye
			{
				get;
				set;
			}

			[Required]
			[DataType(DataType.EmailAddress)]
			[Display(Description="邮箱将用于找回密码，接收网站邮件等作用",Prompt="如：Admin@galnote.com")]
			public String Email
			{
				get;
				set;
			}

			public EntityCollection<Product> Favorites
			{
				get;
				set;
			}

			public GenderType Gender
			{
				get;
				set;
			}

			public int Id
			{
				get;
				set;
			}

			public EntityCollection<User> Invitees
			{
				get;
				set;
			}

			public EntityCollection<User> Inviters
			{
				get;
				set;
			}

			public string Location
			{
				get;
				set;
			}

			public string Music
			{
				get;
				set;
			}

			[Required]
			[RegularExpression(@"\w+")]
			[StringLength(12,MinimumLength=2)]
			[Display(Description = "用户名将用于网站的登录，请以Aa-Zz，0-9_组合输入,请使用2字符以上12字符以内的用户名", Prompt = "如：Guest")]
			public string Name
			{
				get;
				set;
			}

			public long OnlineTime
			{
				get;
				set;
			}

			public string OS
			{
				get;
				set;
			}

			public string PaintingEnviron
			{
				get;
				set;
			}

			public string PaintingTools
			{
				get;
				set;
			}

			[Required]
			[DataType(DataType.Password)]
			[StringLength(48,MinimumLength=4)]
			[Display(Description="用于登录网站的密码，请输入4字符以上的内容",Prompt="如：Password1")]
			public string Password
			{
				get;
				set;
			}

			public EntityCollection<Score> Polls
			{
				get;
				set;
			}

			public DateTime RegisterTime
			{
				get;
				set;
			}

			public EntityCollection<Mail> Senders
			{
				get;
				set;
			}

			public string Sketchpad
			{
				get;
				set;
			}

			public EntityCollection<Product> Works
			{
				get;
				set;
			}
		}
	}
}
